Today, software development tools allow software developers the ability to build executable components using one or more programming languages, such as C, C++, C#, and the like. One advantage for building executable components is that the components, once built, may be re-used by other software programs. Another advantage for building executable components is that new components may be easily extended from existing components.
Generally, components are extended by subclassing, which means deriving a new class from an existing class. These classes and subclasses are written using one of the programming languages. The code that is written is commonly referred to as source code. For traditional runtime environments, the software development tools compile the source code into object code and then link multiple object codes together to create an executable. However, one of the problems with these traditional runtime environments is that each programming language and each version of the programming language require a different runtime environment.
To overcome this problem, a new type of runtime environment has been designed that effectively eliminates many of the cross-language interface and language version problems of the traditional runtime environments. In this new type of runtime environment, development tools compile the source code into an intermediate language. During runtime, the runtime environment compiles the intermediate language into native binary executable code. Thus, the new runtime environment performs the “linking-type” process during runtime. In order to perform this “linking-type” process, the runtime environment reads information (e.g., metadata) and accesses assemblies for the components associated with the program that is being run. In addition, the “linking-type” process uses reflection to identify methods, properties, and the like associated with the component. The metadata includes descriptions for types, versions, resources, and the like. The assemblies may be a single dynamic link library (DLL), or numerous DLLs and resources. These “linking type” processes are quite slow.
Given the advantages of using components, there is a need for a better mechanism for performing this “linking type” process.